package com.shujia.day10;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Code14CollectionOperator {
    public static void main(String[] args) {
        /*
            Collection 集合的遍历方式
         */

        Collection arrayList = new ArrayList();
        arrayList.add(new StudentArr("唐彬",20));
        arrayList.add(new StudentArr("宋旭",21));
        arrayList.add(new StudentArr("张东东",22));


        /*
            方式1：增强for
         */
        for (Object o : arrayList) {
            System.out.println((StudentArr)o);
        }

        /*
            方式2：
                可以通过下标的方式获取每个元素，但是Collection接口中并没有提供下标，所以需要对其进行转换
         */

        Object[] objects = arrayList.toArray(); // 通过toArray方式将其转换成一个 对象数组

        System.out.println("===========");
        for (int i = 0; i < objects.length; i++) {
            System.out.println((StudentArr)objects[i]);
        }

        /*
            方式3：

         */

        /*
           arrayList.iterator返回的是一个 Iterator 但是Iterator为一个接口，而接口是没有实例对象的
                那么其对象应该是 Iterator接口的一个实现类 实现类有很多 那么为了获取实现类
                通过getClass获取当前对象的实际类 通过getName获取其名称

            Iterator 是一个接口，包含了有 hasNext() 和 next() 抽象方法，联想到Scanner中的用法
                hasNext() 表示下一个是否有值
                next() 取出当前的值 并且维护一个指针，每一次取值后，会将指针进行下移，
                    如果当前指针没有对应值，那么会报错 NoSuchElementException

            通过Iterator 可以用while循环对所有的元素进行循环遍历
         */
        Iterator iterator = arrayList.iterator();
        System.out.println(iterator.getClass().getName());  // java.util.ArrayList$Itr


//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.hasNext());
//        System.out.println(iterator.next()); // NoSuchElementException 当next

        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

    }
}
